#pragma once

#include <string>

namespace p2pms
{

struct MediaInfo
{
	std::string media_id;   // 媒体流的唯一标识符
	std::string media_type; // 媒体类型（音频、视频）
	std::string media_name; // 媒体流名称（如音频流名称、视频流名称等）
	std::string src_id;     // 媒体流的源ID
	std::string src_type;   // 媒体源类型（如摄像头、麦克风等）
	std::string src_name;   // 媒体源名称（如摄像头名称、麦克风名称等）
};

enum class CallMode
{
	CALL_MODE_INVALID = 0,
	CALL_MODE_P2P,
	CALL_MODE_P2SP,
	CALL_MODE_SFU
};

enum class CallState
{
	Idle,           // 初始状态，未发起呼叫。
	Calling,        // 呼叫中，等待对方应答
	Connected,      // 通话已建立，双方可以正常通信。
	Terminating,    // 本地已发起挂断，正在等待服务器确认。
	Terminated      // 呼叫已结束（正常挂断、对方拒接、超时未接等）。
};

// 设备类型枚举
enum class MediaDeviceType 
{
	AudioInput,
	AudioOutput,
	VideoInput
};

// 设备信息结构体
struct MediaDevice 
{
	int index;	          // 设备索引
	std::string id;       // 设备唯一标识符
	std::string name;     // 设备显示名称
	MediaDeviceType type; // 设备类型（音频输入、音频输出、视频输入）
};

// 错误码类型
typedef int ErrCode;

#define ERR_OK             0 // 成功
#define ERR_FAILED        -1 // 失败
#define ERR_NOT_INIT      -2 // 未初始化
#define ERR_INVALID_PARAM -3 // 无效参数
#define ERR_NOT_SUPPORTED -4 // 不支持的操作
#define ERR_TIMEOUT       -5 // 超时

// 渲染器ID类型
typedef std::string RenderId;

// 无效的渲染器ID
#define INVALID_RENDER_ID ""

} // namespace p2pms
